<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <button id="btn">行刑</button>

    <script>
      // 1．入职薪水10K，每年涨幅5%，50年后工资多少？
      function fn1() {
        var salary = 1;

        for (var year = 1; year <= 50; year++) {
          // 每年无耻自乘1.05
          // salary = salary * 1.05
          salary *= 1.05;

          console.log(year, "salary=" + salary);
        }
      }

      // 3．打印100以内的奇数
      function fn2() {
        /* 算法1：暴力循环100遍 */
        // for (var i = 1; i <= 100; i++) {
        //   if (i % 2 === 1) {
        //     console.log(i);
        //   }
        // }

        /* 算法2：每次递增2 循环50遍 */
        // for (var i = 1; i <= 100; i+=2) {
        //     console.log(i);
        // }

        /* 算法3:100~1倒数回1 */
        // for (var i = 100; i >= 1; i--) {
        //   if (i % 2 === 1) {
        //     console.log(i);
        //   }
        // }

        /* 算法4 */
        for (var i = 99; i >= 1; i -= 2) {
          console.log(i);
        }

        console.log("game over");
      }

      // 5. 打印图形
      /* 10*4方阵 */
      function fn3() {
        for (var row = 1; row <= 4; row++) {
          // 10颗星星
          for (var column = 1; column <= 10; column++) {
            document.write("*");
          }
          //   撸换行
          document.write("<br>");
        }
      }

      /* 小旗子 */
      function fn4() {
        for (var i = 1; i <= 5; i++) {
          //   第i行有i颗星星
          for (var j = 1; j <= i; j++) {
            document.write("*");
          }
          //   每行结束免费送换行符
          document.write("<br>");
        }
      }

      /* 正三角 */
      function fn5() {
        for (var i = 1; i <= 4; i++) {
          // 若干空白 若干=当前行与终极行的行号差
          for (var k = 1; k <= 4 - i; k++) {
            document.write("__");
          }

          //   2i-1颗星星
          for (var j = 1; j <= 2 * i - 1; j++) {
            document.write("@");
          }

          //   每行结束免费送换行符
          document.write("<br>");
        }
      }

      /* 打橄榄 */
      function fn6() {
        var rows = 7;
        var cols = rows;
        var middleRow = (rows + 1) / 2;

        for (var i = 1; i <= rows; i++) {
          // 计算当前行与核心行的行号差
          //   var differ = i >= 4 ? i - 4 : 4 - i;

          // 计算i-4的绝对值
          var differ = Math.abs(i - middleRow);

          for (var j = 1; j <= cols; j++) {
            if (j > differ && j <= cols - differ) {
              document.write("@");
            } else {
              //   document.write("_");
              document.write("&nbsp;&nbsp;&nbsp;");
            }
          }

          // 每行结束免费送换行符
          document.write("<br>");
        }
      }

      // 7. 计算10的阶乘   10!
      function fn7() {
        var jc = 1;

        for (var i = 1; i <= 10; i++) {
          jc *= i;
          console.log(i + "的阶乘是", jc);
        }
      }

      // 11.  输出20-80之间能被3整除的整数，每5个一行
      function fn8() {
        var count = 0;
        for (var i = 21; i <= 80; i += 3) {
          document.write(i + "&nbsp;" + (++count % 5 === 0 ? "<br>" : ""));
        }
      }

      // 12. 打印出1000-2000年中所有的闰年，并以每行四个数的形式输出
      function fn9() {
        // 同时声明两个变量
        var year = 1000,
          count = 0;
        console.log(year, count);

        while (year <= 2000) {
          //循环体
          // 三连表达式（双分支语法糖）
          // (year % 4 === 0 && year%100!==0)||(year%400===0)?document.write(year+"&nbsp;"):console.log();

          // 且短路（单分支语法糖）
          ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) &&
            // 模4不成立（即模4得0）时输出br
            document.write(year + "&nbsp;" + (!(++count % 4) ? "<br>" : ""));

          // 增长条件
          year++;
        }
      }

      /* if条件的简写 */
      function fn10() {
        var value = true;
        value = 123;
        value = "班长鸟炸天";
        value = -123;
        // if(value === true){

        // value本就成立（value is truthy）
        // 等价于if(Booean(value)===true)
        if (value) {
          console.log("got it", value);
        }
      }

      function fn11() {
        var value = false;
        value = 0;
        value = NaN;
        value = "";
        value = null;
        value = undefined;

        // 当value为falsy时进入分支
        // 等价于if(Booean(value)===false)
        if (!value) {
          console.log("捕获一个falsy值", value);
        }
      }

      // 13 . 求1+2!+3!+...+20!的值
      function fn12() {
        // var sum = 0;
        for (var i = 1,sum=0; i <= 20; i++) {

          // 求i的阶乘
          var jc = 1;
          for (var j = 1; j <=i; j++) {
            jc *= j;
          }
          console.log("%s的阶乘是%s", i, jc);

          // 将jc丢入总量
          sum += jc;
          console.log("1~%s的阶乘和为%s", i, sum);
        }
      
      }

      btn.onclick = function () {
        fn12();
      };
    </script>
  </body>
</html>
